查看原文
其他

基于Python的ArcGIS(ArcPy)多进程自动出图

你个海怪 GIS荟 2023-01-11

点击上方蓝字,关注我带你飞!

Note: 由于微信不支持发布后的文章做大幅度的修改,所以删除了旧文章,重新发布修改版本。修改内容包括文章措辞,更严谨,代码片段改为图片显示,优化手机上查看的体验等等...


前言:流程化、自动化、集中化是计算机的优势项,电脑能干的就让电脑干,不仅仅干的更好还能全部干完。解放人类,摸鱼万岁!使用 Python 的多进程导出图片,发挥计算机性能,节约人的时间。文末附代码和傻瓜式操作视频,人人都可用!


1.什么是ArcPy

ArcPy 是一个安装 ArcGIS 会附带的站点包,通过 Python(安装 ArcGIS 的时候也会安装 python ) 实现。

简言之,通过 Python 能直接调用 arcpy 执行地理数据分析、数据转换、数据管理和地图自动化等功能,满足多种客制化的需求。

说人话就是,你买了一个超大的工具台名叫 ArcGIS;工具台上附赠了一个叫 Python 的工具箱(Python一门编程语言);工具箱中的一把螺丝刀就叫 ArcPy。

官方文档:https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy/what-is-arcpy-.htm




2.什么是多进程和自动

多进程相对的是单进程。单进程就是一次做一件事,多进程就是同时做多件事。举个例子,一个人打开一个 mxd 文档,执行导出地图操作,地图导出完成后,再打开下一个 mxd 重复上一个流程,这就可以理解为单进程;

但是这个人同时打开4个 mxd 文档,然后都执行地图导出操作,那么这个就可以理解为多进程导出地图。但是呢,这不是自动化的,是人工操作的。

我们通过使用 Python 中一把叫做 multiprocessing 的螺丝刀实现多进程。

多进程和自动不是连起来的哦,是分开的,既然有单进程,那么就有单进程自动化制图和多进程自动出图。

简单来说:

  • 普通出图:一个人干活,得有人看着,一旦没人守着就停止工作了。

  • 单进程自动出图:计算机一件事情一件事情的做。

  • 多进程自动出图:计算机同时干几件事。

官方文档:https://docs.python.org/zh-cn/3/library/multiprocessing.html 





3.实现多进程自动出图

为什么要自动出图,当然是解放人类、解放生产力啊!

使用 ArcGIS 制图完成然后导出,我们知道通常,一张图片对应一个 mxd 文件。

在生产环境或者学习实验中,能遇到一个县级行政区下辖的所有村都需要出一张某方面的专题图;又或者是某区域十年来的气温变化专题图的情况,光是需要制作 mxd 文件就有几十个乃至上百个(可以使用 Python 语言等进行自动化制图,以后详说),你还要一个个打开 mxd 文件,心累......

而使用 arcpy 自动化出图,解放生产力,同时有多进程的加持能充分挖掘计算机的性能。

在电脑最低配置都是4核的今天,总体出图速度提升个2到3倍不是问题,更不用说电脑自动化操作,连半夜都能继续出图,不再加班熬夜,拯救社畜。


3.1ArcPy单进程自动出图

还是简单的讲一下使用 ArcPy单进程自动出图 网上很多帖子,我去抄一个贴到下面:

*把所有mxd文件放到这个文件夹里面,就可以让电脑自己出图了,很简单吧!


函数 export 接收两个参数,第一个是存放了 mxd 文件的文件夹地址,同时该地址也是地图导出成果的输出文件夹。第二个是出图分辨率,你可以填300。


3.2 ArcPy多进程自动出图

本文的重点来了!那么如何实现多进程?前面我们已经说了:

我们通过使用“工具箱”中一把叫做 multiprocessing 的螺丝刀实现多进程。

multiprocessing模块的官方文档


接下用一个例子来详细讲讲思路:假如一个文件夹中有400个 mxd 文件需要出图

3.2.1首先我们需要把数据切片

我们读取该文件夹中的所有 mxd 文件的地址,然后切分成几个部分,比如分成4分,每一部分都有100个 mxd 文件。

如何切分呢?电脑可没有人聪明。

主要思路是用列表的 pop() 方法操作。打个比方:从兜里拿“硬币”出来,放到篮子1里面;再拿一个出来,放到篮子2里;再拿一个出来,放到篮子3里;再拿一个出来,放到篮子4里;再拿一个出来,再一次放到篮子1里,循环操作。直到”硬币“取完,操作结束。


以下附上自己写的分组代码(肯定有更好的写法,这个是很久以前写的了,但是也不想改了)


3.2.2然后是多进程的基本操作

以下是多进程的一个简单使用演示,虽然看上去好像没有效果,但是确实开启了多进程。😄

需要注意的是:在 Windows 平台上,运行多进程必须在 if __name__ == '__main__': 中。以下是个简单示例:


3.3完整代码

完整代码如下:





附傻瓜操作演示和下载

该视频演示如何使用 Python 源代码执行多进程自动导出地图。傻瓜式操作,谁都能学会,只要你电脑有安装ArcGIS。


Python源文件下载:

链接:https://pan.baidu.com/s/1BNIySChzM5xq1CQTlXSVHA

提取码:x8xl




结束语





分享GIS,不止于Python。荟GIS精粹,关注我,带你飞!我叫 GIS荟(长按扫码也行)


欢迎交流
原创不易,请多转发和分享



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存